jsoncpp的简易教程

您所在的位置:网站首页 jsoncpp 二维数组 jsoncpp的简易教程

jsoncpp的简易教程

2024-07-10 20:42| 来源: 网络整理| 查看: 265

目录Jsoncpp简易教程json简介pairobjectarrayjsoncpp的安装 --建议使用静态库Linux下编译安装Windows下安装和集成到vs项目使用jsoncpp核心介绍jsoncpp解析json从文件中解析json内存中解析json对象内存中解析json数组jsoncpp封装jsonjson封装 简易的演示json封装 内嵌array的objectjson封装 内嵌object的arrayjsoncpp的新式API的使用封装json解析json给json添加字段(其实就是解析再封装)jsoncpp其他常用的api注意事项参考以及转载处

Jsoncpp简易教程 json简介

json中仅支持两种结构:

对象 数组

“名称/值”对的集合(A collection of name/value pairs)。一般称为对象(object)。不同的语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组 (associative array)。

值的有序表,在大部分语言中,它被理解为数组(array)。

你看到的json 要么{}包围,要么[]包围

{ 开头说明是个json对象 [ 开头说明 这是个json数组

pair

一个pair(键值对)的通常结构是: string : value

键值之间的对应关系使用 : 表示,左边的为key,右边的为value。 一般key使用字符串,当然也可以使用数字,但是建议key只使用字符串。 value的取值就比较随便,可以是任何任何json支持的类型(比如object,array,string,number,true/false,null等)这就为嵌套类型带来了可能。

object

object可以认为是多个pair的集合。 其语法是以{作为object开始,以}作为object结束,不同的pair之间使用,分割。 需要说明的是object中的数据存储是无序的。(所有你生成的json,在解析打印出来不一定是你生成的json顺序)

{ "name" : "tocy", "age" : 1000 } array

array是value的有序集合。 其语法是以[作为array起始,以]作为array结束,array元素之间使用,分割。 实际使用中建议在array中使用统一的类型,否则解析起来会麻烦点。

// 合法 [{"name":"tocy"}, {"age":1000}, {"domain":"cn"}] // 也合法,但是不方便解析 [1, "ts", true, {"key":45}] jsoncpp的安装 --建议使用静态库 Linux下比较简单。 jsoncpp项目里面有cmake配置文件。安装比较简单。 Windows下比较麻烦点。推荐使用vcpkg安装或者使用VS的nuget安装。 Linux下编译安装 mkdir build && cd build && cmake .. make sudo make install // 如果没有生效 // sudo ldconfig Windows下安装和集成到vs 使用vcpkg ./vcpkg.exe install jsoncpp:x64-windows-static 我使用的静态库 在VS中配置 头文件/库文件路径和链接器的输入文件 jsoncpp.lib 我这里使用的是静态库,如果使用的是动态库还需要在程序的运行目录放入jsoncpp.dll

需要注意vcpkg的编译方式(MT/MTd MD/MDd) 静态库是MT/MTd,动态库是后者。

如果vs报错4996,那是因为你使用了旧式的API,使用新式API或者关闭这个错误。

在VS项目配置中 C/C++高级。禁用特定警告输入4996。 但是更加推荐使用新的API来解析和生成json。

项目使用

JsonCpp 中所有对象、类名都在 namespace Json 中, 只需要包含 json/json.h 即可。

注意需要链接哦,我是用的cmake target_link_libraries(UseJsoncpp -ljsoncpp)

jsoncpp核心介绍

JsonCpp 主要包含三种类型的 class: (老式API讲解理论核心并不过时,这里按照老式的来讲,新式api只是为了安全而已)

Json::Value:可以表示所有支持的类型,如:int , double ,string , object, array等。其包含节点的类型判断(isNull,isBool,isInt,isArray,isMember,isValidIndex等),类型获取(type),类型转换(asInt,asString等),节点获取(get,[]),节点比较(重载=,==,!=),节点操作(compare,swap,removeMember,removeindex,append等)等函数。

Json::Reader:将文件流或字符串创解析到Json::Value中,主要使用parse函数。Json::Reader的构造函数还允许用户使用特性Features来自定义Json的严格等级。

Json::Writer:与JsonReader相反,将Json::Value转换成字符串流等,Writer类是一个纯虚类,并不能直接使用。在此我们使用 Json::Writer 的子类:Json::FastWriter(将数据写入一行,没有格式),Json::StyledWriter(按json格式化输出,易于阅读)

jsoncpp解析json 从文件中解析json

真实场景就是当配置文件是json时候

checkjson.json的内容为

{ "name" : "tocy", "age" : 1000 }

这里面保存的是最简单的object,我们可以使用下面代码将其读入并解析:

void parse_from_file() { std::ifstream ifs; ifs.open("/home/tudou/tmp/checkjson.json"); // Windows自己注意路径吧 assert(ifs.is_open()); Json::Reader reader; Json::Value root; // 解析到root,root将包含Json里所有子元素 if (!reader.parse(ifs, root, false)) { cerr


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3